/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package org.cando.budgetapp.bean;

import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.enterprise.context.SessionScoped;
import javax.faces.model.SelectItem;
import javax.inject.Named;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;
import javax.transaction.UserTransaction;
import org.cando.budgetapp.jpa.controller.GrupoJpaController;
import org.cando.budgetapp.jpa.controller.LineaaereaJpaController;
import org.cando.budgetapp.jpa.controller.MarcaJpaController;
import org.cando.budgetapp.jpa.controller.MetodospagoJpaController;
import org.cando.budgetapp.jpa.controller.OficinaJpaController;
import org.cando.budgetapp.jpa.controller.TipopagoJpaController;
import org.cando.budgetapp.jpa.entity.Grupo;
import org.cando.budgetapp.jpa.entity.Lineaaerea;
import org.cando.budgetapp.jpa.entity.Marca;
import org.cando.budgetapp.jpa.entity.Oficina;
import org.cando.budgetapp.jpa.entity.Metodospago;
import org.cando.budgetapp.jpa.entity.Tipopago;

/**
 *
 * @author Zarina
 */

@Named(value = "reservaBean")
@SessionScoped
public class Reserva implements java.io.Serializable{
    
    UserTransaction utx;
    @PersistenceUnit(unitName = "org.cando_BudgetApp_war_1.0-SNAPSHOTPU")
    EntityManagerFactory emf;
    
    //Atribustos de la linea aerea
    private LineaaereaJpaController lineaaereaJpaController;
    private java.util.List<SelectItem> lineaAeresSelectItem;
    private String lineaAereaSelected;
    private Integer flayNumber;
    private Integer frecueNumFlay;
    
    //Atributos de oficina
    private OficinaJpaController oficinaJpaController;
    private java.util.List<SelectItem> oficinaSelectItem;
    private java.util.List<SelectItem> oficinaSelectItemRe;
    private String oficinaSelected;
    private String oficinaSelectedRe;
    private Date dayStart;
    private Date dayEnd;
    
    //Atributos de metodo de pago
    private MetodospagoJpaController metodospagoJpaController;
    private java.util.List<SelectItem> metodoPagoSelectItem;
    private String metodoPagoSelected;

    //Atributos tipo de pago
    private TipopagoJpaController tipopagoJpaController;
    private java.util.List<SelectItem> tipoPagoSelectItem;
    private String tipoPagoSelected;
    
    //Atributos de marca y modelo del vehiculo
    private MarcaJpaController marcaJpaController;
    private java.util.List<SelectItem> marcaSelectItem;
    private String marcaSelected;
    
    //Atributos del grupo del vehiculo
    private GrupoJpaController grupoJpaController;
    private java.util.List<SelectItem> grupoSelectItem;
    private String grupoSelected;
    
    //Atributos cliente
    private String name;
    private String lastName;
    private Date borndDay;
    private Integer Age; 
    
    //Atributos Descuento
    private String discountNumber; 
    private String couponDiscount ;
    private String frequentCustomer;
    
    public Reserva() {
    }
    
    @PostConstruct
    public void initController(){
        //Se inicializa el controlador de la entidad de lineas aéreas
        lineaaereaJpaController = new LineaaereaJpaController(utx, emf);
        oficinaJpaController = new OficinaJpaController(utx, emf);
        metodospagoJpaController = new MetodospagoJpaController(utx, emf);
        tipopagoJpaController = new TipopagoJpaController(utx, emf);
        marcaJpaController = new MarcaJpaController(utx, emf);
        grupoJpaController = new GrupoJpaController(utx, emf);
        
        buildSelectItems();
        oficinaSelectItem();
        oficinaSelectItemReturn();
        paymentMethod();
        payType();
        selectMarcaandModel();
        selectGrup();
    }
    
    //Método para construir la lista de Items que se presentara en el combo del formulario de reserva para las lineas aereas
    public void buildSelectItems(){
        java.util.List<Lineaaerea> lineaAereaList = lineaaereaJpaController.findLineaaereaEntities();
        
        lineaAeresSelectItem = new java.util.ArrayList<>();
        lineaAeresSelectItem.add(new SelectItem("", "----Seleccionar----"));
        
        if(!lineaAereaList.isEmpty()){
            java.util.Iterator<Lineaaerea> it = lineaAereaList.iterator();
            Lineaaerea lineaaereaAux;
            
            while(it.hasNext()){
                lineaaereaAux = it.next();
                lineaAeresSelectItem.add(new SelectItem(lineaaereaAux.getCodigolineaaerea(), lineaaereaAux.getNombre()));
            }
        }
    }
    
    //Metodo para construir la lista de Item que se presentan en el campo del formulario de la reserva para las oficinas
    public void oficinaSelectItem(){
        java.util.List<Oficina> oficinaList = oficinaJpaController.findOficinaEntities();
        
        oficinaSelectItem = new java.util.ArrayList<>();
        oficinaSelectItem.add(new SelectItem("", "----Seleccionar----"));
        
        if(!oficinaList.isEmpty()){
        java.util.Iterator<Oficina> it = oficinaList.iterator();
        Oficina oficinaAux;
        
        while(it.hasNext()){
            oficinaAux = it.next();
            oficinaSelectItem.add(new SelectItem(oficinaAux.getCodigooficina(), oficinaAux.getNombre()));
        }
        
        }
        
    }
    
     //Metodo para construir la lista de Item que se presentan en el campo del formulario de la reserva para las oficinas de retorno
     public void oficinaSelectItemReturn(){
        java.util.List<Oficina> oficinaList = oficinaJpaController.findOficinaEntities();
        
        oficinaSelectItemRe = new java.util.ArrayList<>();
        oficinaSelectItemRe.add(new SelectItem("", "----Seleccionar----"));
        
        if(!oficinaList.isEmpty()){
        java.util.Iterator<Oficina> it = oficinaList.iterator();
        Oficina oficinaAux;
        
        while(it.hasNext()){
            oficinaAux = it.next();
            oficinaSelectItemRe.add(new SelectItem(oficinaAux.getCodigooficina(), oficinaAux.getNombre()));
        }
        
        }
        
    }
     
     //Metodo para construir la lista de item que se presentan en el campo del formulario de la reserva para seleccionar el metodo de pago
     public void paymentMethod(){
         java.util.List<Metodospago> metodoPagoList = metodospagoJpaController.findMetodospagoEntities();
         
         metodoPagoSelectItem = new java.util.ArrayList<>();
         metodoPagoSelectItem.add(new SelectItem("", "----Seleccionar----"));
     
         if (!metodoPagoList.isEmpty()){
         java.util.Iterator<Metodospago> it = metodoPagoList.iterator();
         Metodospago metodospagoAux;
         
         while(it.hasNext()){
             metodospagoAux = it.next();
             metodoPagoSelectItem.add(new SelectItem(metodospagoAux.getCodigometodo(), metodospagoAux.getNombre()));
         }
         
         }
     
     }
     
     //Metodo para construir la lista de item que se presentan en el campo del formulario de la reserva para seleccionar el tipo de pago
     public void payType(){
         java.util.List<Tipopago> tipoPagoList = tipopagoJpaController.findTipopagoEntities();
         
         tipoPagoSelectItem = new java.util.ArrayList<>();
         tipoPagoSelectItem.add(new SelectItem("", "----Seleccionar----"));      
         
         if (!tipoPagoList.isEmpty()){
         java.util.Iterator<Tipopago> it = tipoPagoList.iterator();
         Tipopago tipopagoAux;
         
         while(it.hasNext()){
             tipopagoAux = it.next();
             tipoPagoSelectItem.add(new SelectItem(tipopagoAux.getCodigotipopago(), tipopagoAux.getNombre()));
         }
         
         }
     
     }
     
     //Metodo para construir la lista de item que se presentan en el campo del formulario de la reserva para seleccionar la marca y modelo del vehiculo
     public void selectMarcaandModel(){
         java.util.List<Marca> marcaList = marcaJpaController.findMarcaEntities();
         
         marcaSelectItem = new java.util.ArrayList<>();
         marcaSelectItem.add(new SelectItem("", "----Seleccionar----"));      
         
         if (!marcaList.isEmpty()){
         java.util.Iterator<Marca> it = marcaList.iterator();
         Marca marcaAux;
         
         while(it.hasNext()){
             marcaAux = it.next();
             marcaSelectItem.add(new SelectItem(marcaAux.getCodigomarca(), marcaAux.getNombre()));
         }
         
         }
         
     }
     
     //Metodo para construir la lista de item que se presentan en el campo del formulario de la reserva para seleccionar el grupo del vehiculo a reservar
     public void selectGrup(){
         java.util.List<Grupo> grupoList = grupoJpaController.findGrupoEntities();
         
         grupoSelectItem = new java.util.ArrayList<>();
         grupoSelectItem.add(new SelectItem("", "-Seleccionar-"));      
         
         if (!grupoList.isEmpty()){
         java.util.Iterator<Grupo> it = grupoList.iterator();
         Grupo grupoAux;
         
         while(it.hasNext()){
             grupoAux = it.next();
             grupoSelectItem.add(new SelectItem(grupoAux.getCodigogrupo(), grupoAux.getNombre()));
         }
         
         }
         
     }


    public UserTransaction getUtx() {
        return utx;
    }

    public void setUtx(UserTransaction utx) {
        this.utx = utx;
    }

    public EntityManagerFactory getEmf() {
        return emf;
    }

    public void setEmf(EntityManagerFactory emf) {
        this.emf = emf;
    }

    public LineaaereaJpaController getLineaaereaJpaController() {
        return lineaaereaJpaController;
    }

    public void setLineaaereaJpaController(LineaaereaJpaController lineaaereaJpaController) {
        this.lineaaereaJpaController = lineaaereaJpaController;
    }

    public List<SelectItem> getLineaAeresSelectItem() {
        return lineaAeresSelectItem;
    }

    public void setLineaAeresSelectItem(List<SelectItem> lineaAeresSelectItem) {
        this.lineaAeresSelectItem = lineaAeresSelectItem;
    }

    public String getLineaAereaSelected() {
        return lineaAereaSelected;
    }

    public void setLineaAereaSelected(String lineaAereaSelected) {
        this.lineaAereaSelected = lineaAereaSelected;
    }

    public OficinaJpaController getOficinaJpaController() {
        return oficinaJpaController;
    }

    public void setOficinaJpaController(OficinaJpaController oficinaJpaController) {
        this.oficinaJpaController = oficinaJpaController;
    }

    public List<SelectItem> getOficinaSelectItem() {
        return oficinaSelectItem;
    }

    public void setOficinaSelectItem(List<SelectItem> oficinaSelectItem) {
        this.oficinaSelectItem = oficinaSelectItem;
    }

    public String getOficinaSelected() {
        return oficinaSelected;
    }

    public void setOficinaSelected(String oficinaSelected) {
        this.oficinaSelected = oficinaSelected;
    }

    public List<SelectItem> getOficinaSelectItemRe() {
        return oficinaSelectItemRe;
    }

    public void setOficinaSelectItemRe(List<SelectItem> oficinaSelectItemRe) {
        this.oficinaSelectItemRe = oficinaSelectItemRe;
    }

    public String getOficinaSelectedRe() {
        return oficinaSelectedRe;
    }

    public void setOficinaSelectedRe(String oficinaSelectedRe) {
        this.oficinaSelectedRe = oficinaSelectedRe;
    }

    public MetodospagoJpaController getMetodospagoJpaController() {
        return metodospagoJpaController;
    }

    public void setMetodospagoJpaController(MetodospagoJpaController metodospagoJpaController) {
        this.metodospagoJpaController = metodospagoJpaController;
    }

    public List<SelectItem> getMetodoPagoSelectItem() {
        return metodoPagoSelectItem;
    }

    public void setMetodoPagoSelectItem(List<SelectItem> metodoPagoSelectItem) {
        this.metodoPagoSelectItem = metodoPagoSelectItem;
    }

    public String getMetodoPagoSelected() {
        return metodoPagoSelected;
    }

    public void setMetodoPagoSelected(String metodoPagoSelected) {
        this.metodoPagoSelected = metodoPagoSelected;
    }

    public List<SelectItem> getTipoPagoSelectItem() {
        return tipoPagoSelectItem;
    }

    public void setTipoPagoSelectItem(List<SelectItem> tipoPagoSelectItem) {
        this.tipoPagoSelectItem = tipoPagoSelectItem;
    }

    public String getTipoPagoSelected() {
        return tipoPagoSelected;
    }

    public void setTipoPagoSelected(String tipoPagoSelected) {
        this.tipoPagoSelected = tipoPagoSelected;
    }

    public TipopagoJpaController getTipopagoJpaController() {
        return tipopagoJpaController;
    }

    public void setTipopagoJpaController(TipopagoJpaController tipopagoJpaController) {
        this.tipopagoJpaController = tipopagoJpaController;
    }

    public MarcaJpaController getMarcaJpaController() {
        return marcaJpaController;
    }

    public void setMarcaJpaController(MarcaJpaController marcaJpaController) {
        this.marcaJpaController = marcaJpaController;
    }

    public List<SelectItem> getMarcaSelectItem() {
        return marcaSelectItem;
    }

    public void setMarcaSelectItem(List<SelectItem> marcaSelectItem) {
        this.marcaSelectItem = marcaSelectItem;
    }

    public String getMarcaSelected() {
        return marcaSelected;
    }

    public void setMarcaSelected(String marcaSelected) {
        this.marcaSelected = marcaSelected;
    }

    public GrupoJpaController getGrupoJpaController() {
        return grupoJpaController;
    }

    public void setGrupoJpaController(GrupoJpaController grupoJpaController) {
        this.grupoJpaController = grupoJpaController;
    }

    public List<SelectItem> getGrupoSelectItem() {
        return grupoSelectItem;
    }

    public void setGrupoSelectItem(List<SelectItem> grupoSelectItem) {
        this.grupoSelectItem = grupoSelectItem;
    }

    public String getGrupoSelected() {
        return grupoSelected;
    }

    public void setGrupoSelected(String grupoSelected) {
        this.grupoSelected = grupoSelected;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public Date getBorndDay() {
        return borndDay;
    }

    public void setBorndDay(Date borndDay) {
        this.borndDay = borndDay;
    }

    public Integer getAge() {
        return Age;
    }

    public void setAge(Integer Age) {
        this.Age = Age;
    }

    public Date getDayStart() {
        return dayStart;
    }

    public void setDayStart(Date dayStart) {
        this.dayStart = dayStart;
    }

    public Date getDayEnd() {
        return dayEnd;
    }

    public void setDayEnd(Date dayEnd) {
        this.dayEnd = dayEnd;
    }

    public Integer getFlayNumber() {
        return flayNumber;
    }

    public void setFlayNumber(Integer flayNumber) {
        this.flayNumber = flayNumber;
    }

    public Integer getFrecueNumFlay() {
        return frecueNumFlay;
    }

    public void setFrecueNumFlay(Integer frecueNumFlay) {
        this.frecueNumFlay = frecueNumFlay;
    }
    
        
        
}
